package src.Aula07.Ex01;
import java.util.ArrayList;
import java.util.Scanner;

public class Agencia{
    
    private String nomeAgencia;
    private String endereco;
    private ArrayList<Alojamento> alojamentos = new ArrayList<Alojamento>();
    private ArrayList<Carro> carrosDeAluguer = new ArrayList<Carro>();

    public Agencia(String nomeAgencia, String endereco) {
        this.nomeAgencia = nomeAgencia;
        this.endereco = endereco;
    }

    @Override
    public String toString() {
        String message = "\nAgencia de Viagens " + nomeAgencia + "\nEndereco: " + endereco + "\n\nAlojamentos ("+ alojamentos.size() + "):\n\n";

        for (Alojamento alojamento : alojamentos)
            message += alojamento.toString() + "\n\n";
        message += "\nCarros de aluguer (" + carrosDeAluguer.size() + "):\n\n";

        for (Carro carro : carrosDeAluguer)
            message += carro.toString() + "\n";

        return message;
    }

    public String getNome() {return nomeAgencia;}
    public String getEndereco() {return endereco;}
    public ArrayList<Alojamento> getAlojamentos() {return alojamentos;}
    public ArrayList<Carro> getCarrosDeAluguer() {return carrosDeAluguer;}


    public void setNome(String novoNome) {
        this.nomeAgencia= novoNome;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public void setAlojamentos(ArrayList<Alojamento> alojamentos) {
        this.alojamentos = alojamentos;
    }


    public void setCarrosDeAluguer(ArrayList<Carro> carrosDeAluguer) {
        this.carrosDeAluguer = carrosDeAluguer;
    }

    public void addAlojamento(Alojamento alojamento) {
        this.alojamentos.add(alojamento);

    }

    public void addCarroDeAluguer(Carro carro) {
        this.carrosDeAluguer.add(carro);
    }

    public void removeCarroDeAluguer(Carro carro) {
        this.carrosDeAluguer.add(carro);
    }

    public void removeAlojamento(Alojamento alojamento) {
        this.alojamentos.remove(alojamento);

    }

    public void menu(Scanner sc) {

        int acao = -1;

        while (acao != 12) {
            System.out.print("\n1 - Informacao sobre agencia de viagens " + this.nomeAgencia
                    + "\n2 - Check in num alojamento (inclui apartamentos e quartos de hotel)\n3 - Check out num alojamento (inclui apartamentos e quartos de hotel)\n4 - Levantar carro de aluguer\n5 - Entregar carro de aluguer\n6 - Adicionar alojamento\n7 - Adicionar apartamento\n8 - Adicionar quarto de hotel\n9 - Remover alojamento (inclui apartamentos e quartos de hotel)\n10 - Adicionar carro de aluguer\n11 - Remover carro de aluguer\n12 - Sair\nAcao: ");
            acao = sc.nextInt();
            sc.nextLine();

            switch (acao) {
            case 1: // Informacao sobre agencia de viagens
                System.out.println(this);
                break;
            case 2: // Check in
                System.out.print("Nome do alojamento para check in: ");
                String nomeAlojamentoCheckIn = sc.nextLine();

                for (Alojamento alojamento : alojamentos)
                    if (alojamento.getNome().equals(nomeAlojamentoCheckIn)) {
                        if (alojamento.getDisponibilidade())
                            alojamento.checkIn();
                        else
                            System.out.println("Este alojamento nao esta disponivel de momento");
                        break;
                    }
                break;
            case 3: // Check out
                System.out.print("Nome do alojamento para check out: ");
                String nomeAlojamentoCheckOut = sc.nextLine();

                for (Alojamento alojamento : alojamentos)
                    if (alojamento.getNome().equals(nomeAlojamentoCheckOut)) {
                        alojamento.checkOut();
                        break;
                    }
                break;
            case 4: // Levantar carro
                System.out.print("Nome do carro de aluguer a levantar: ");
                String nomeCarroLevantar = sc.nextLine();

                for (Carro carro : carrosDeAluguer)
                    if (carro.getNome().equals(nomeCarroLevantar)) {
                        if (carro.isDisponivel())
                            carro.levantar();
                        else
                            System.out.println("Este carro nao esta disponivel de momento");
                        break;
                    }
                break;
            case 5: // Entregar carro
                System.out.print("Nome do carro de aluguer a entregar: ");
                String nomeCarroEntregar = sc.nextLine();
                for (Carro carro : carrosDeAluguer)
                    if (carro.getNome().equals(nomeCarroEntregar)) {
                        carro.entregar();
                        break;
                    }
                break;
            case 6: // Adicionar alojamento
                System.out.print("Nome alojamento a adicionar: ");
                String nome1 = sc.nextLine();
                System.out.print("Codigo: ");
                String codigo1 = sc.nextLine();
                System.out.print("Local: ");
                String local1 = sc.nextLine();
                System.out.print("Preco por noite: ");
                Double precoPorNoite1 = (double) sc.nextDouble();
                System.out.print("Avaliacao: ");
                Double avaliacao1 = (double) sc.nextDouble();
                System.out.print("Disponivel (\"Sim\" ou \"Nao\"): ");
                boolean disponivel1 = false;
                if (sc.next().toLowerCase().equals("sim"))
                    disponivel1 = true;

                this.addAlojamento(new Alojamento(codigo1, nome1, local1, precoPorNoite1, disponivel1, avaliacao1));
                break;
            case 7: // Adicionar apartamento
                System.out.print("Nome apartamento a adicionar: ");
                String nome2 = sc.nextLine();
                System.out.print("Codigo: ");
                String codigo2 = sc.nextLine();
                System.out.print("Local: ");
                String local2 = sc.nextLine();
                System.out.print("Preco por noite: ");
                Double precoPorNoite2 = (double) sc.nextDouble();
                System.out.print("Avaliacao: ");
                Double avaliacao2 = (double) sc.nextDouble();
                System.out.print("Disponivel (\"Sim\" ou \"Nao\"): ");
                boolean disponivel2 = false;
                if (sc.next().toLowerCase().equals("sim"))
                    disponivel2 = true;
                System.out.print("Numero de quartos: ");
                int numeroDeQuartos = sc.nextInt();

                this.addAlojamento(new Apartamento(codigo2, nome2, local2, precoPorNoite2, disponivel2, avaliacao2,
                        numeroDeQuartos));
                break;
            case 8: // Adicionar quarto de hotel
                System.out.print("Nome quarto de hotel a adicionar: ");
                String nome3 = sc.nextLine();
                System.out.print("Codigo: ");
                String codigo3 = sc.nextLine();
                System.out.print("Local: ");
                String local3 = sc.nextLine();
                System.out.print("Preco por noite: ");
                Double precoPorNoite3 = (double) sc.nextDouble();
                System.out.print("Avaliacao: ");
                Double avaliacao3 = (double) sc.nextDouble();
                System.out.print("Disponivel (\"Sim\" ou \"Nao\"): ");
                boolean disponivel3 = false;
                if (sc.next().toLowerCase().equals("sim"))
                    disponivel3 = true;
                System.out.print("Tipo (\"Single\" ou \"Double\" ou \"Twin\" ou \"Triple\"): ");
                String tipo = sc.next();

                this.addAlojamento(
                        new Hotel(codigo3, nome3, local3, precoPorNoite3, disponivel3, avaliacao3, tipo));
                break;
            case 9: // Remover alojamento (inclui apartamentos e quartos de hotel)
                System.out.print("Nome alojamento (inclui apartamentos e quartos de hotel) a remover: ");
                String alojamentoRemover = sc.nextLine();
                for (Alojamento alojamento : alojamentos)
                    if (alojamento.getNome().equals(alojamentoRemover)) {
                        alojamentos.remove(alojamento);
                        break;
                    }

                break;
            case 10: // Adicionar carro de aluguer
                System.out.print("Nome do carro de aluguer a adicionar: ");
                String nome4 = sc.nextLine();
                System.out.print("Classe (A a F): ");
                char classe = sc.next().toCharArray()[0];
                System.out.print("Tipo combustivel (\"Diesel\" ou \"Gasolina\"): ");
                String tipoCombustivel = sc.next();
                System.out.print("Disponivel (\"Sim\" ou \"Nao\"): ");
                boolean disponivel4 = false;
                if (sc.next().toLowerCase().equals("sim"))
                    disponivel4 = true;
                carrosDeAluguer.add(new Carro(nome4, classe, tipoCombustivel, disponivel4));

                break;
            case 11: // Remover carro de aluguer
                System.out.print("Nome do carro de aluguer a remover: ");
                String carroRemover = sc.nextLine();
                for (Carro carroDeAluguer : carrosDeAluguer)
                    if (carroDeAluguer.getNome().equals(carroRemover)) {
                        carrosDeAluguer.remove(carroDeAluguer);
                        break;
                    }
                break;
            }

        }
        return;

    }
}